package gui;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JPanel;

import model.msg;

/**
 * Panel reprezentujacy okno symulacji supermarketu. Na panelu wyrysowywane sa:
 * miejsce przed i za kasami
 * kasy
 * kolejki
 * klienci - rozróżnialni kolorem
 * czas obsługi klienta 
 * czas trwania symulacji
 */
class CashierPane extends JPanel {
    private static final long serialVersionUID = 1L;

     // wymiary kas wyrysowywanych na panelu
     final int bOffWidth = 50;
     final int bOffHeight = 50; 

 
    private int[] stany= new int[10];
    
     
    private int[][] _kasysymulacji;
    private int[] _PrzedKasami; 
    private int[] _ZaKasami;
    private int czas;
    private int[][] czasyObs;
     /**
      * Zmienia widok panelu na podstawie wiadomości o aktualnym stanie symulacji.
      * @param symulInfo obiekt reprezentujacy stan symulacji.
      */
     public void change(msg symulInfo)
     {
         //Pobiera aktualny stan symulacji.
         // pobiera informacje z o modelu
         
        this._kasysymulacji = symulInfo.Kasy;
        this._PrzedKasami = symulInfo.przedkasami; 
        this._ZaKasami = symulInfo.zakasami;
        this.czas = symulInfo.czasSymulacji;
        this.czasyObs = symulInfo.czsyObs;
         repaint();
      }
     
     
     /**
      * Konstruktor panelu. Ustawia rozmieszczenie przyciskow, tlo.
      */
     public CashierPane(){
         
       
        this.stany = new int[10];
        for(int i = 0; i<10; i++)
            this.stany[i] = 2; //0 -zamknięte, 1-w trakcie zamykania, 2 -otawrte
        this._kasysymulacji = new int[10][15];
        for(int i = 0; i<10;i++){
            for(int j=0;j<15;j++)
                this._kasysymulacji[i][j] = (i*j) +j;
        }
        this._PrzedKasami = new int[20];
        for(int i = 0; i<20;i++){
            this._PrzedKasami[i] = i;
        }
        this._ZaKasami = new int[20];
        for(int i = 0; i<20;i++){
            this._ZaKasami[i] = i;
        }
        this.czas = 0;
        
        this.czasyObs = new int[10][20];
        for(int i = 0; i<10;i++){
            for(int j=0;j<20;j++)
                this.czasyObs[i][j] = 5;
        }
       repaint();
        }
     
     /**
      * Rysuje tło, kasy, miejsca przed i za oraz kolejki przy kasach.
      */
     public void paintComponent(Graphics g) {
         
         super.paintComponent(g);
         
         /** Ustawia tło panelu.*/
         String imagefile = "images\\background.png";
         Image background = Toolkit.getDefaultToolkit().getImage(imagefile);
         g.drawImage(background,0,0,this.getWidth(),this.getHeight(),this);
         
        //ładuje obrazek dla kasy
        Image casImg = Toolkit.getDefaultToolkit().getImage("images\\cas.gif");
         
        //wyrysowuje kasy
        for(int i = 0; i<10; i++){
            //rysuj obrazek kasy
            g.drawImage(casImg, 60 + (i * 90), 190, bOffWidth,bOffHeight,null);
        }
        
        //wyrysowuje stany kas
        for (int j = 0; j<10; j++){
        int stan = stany[j];
        {
            switch(stan){

            case 2:
            g.setColor(Color.green);
            g.fillRect( 65+ (j * 90), 170,10,10);
            break;
            case 1:
            g.setColor(Color.yellow);
            g.fillRect(65 + (j * 90), 170,10,10);
            break;
            case 0:
            g.setColor(Color.red);
            g.fillRect(65 + (j * 90), 170,10,10);
            break;
            }
        }
        
        // wyrysowuje miejsce przed kasami

        
        for(int k=0;k<this._PrzedKasami.length;k++){
            if(_PrzedKasami[k] != 0){
            g.setColor(new Color((_PrzedKasami[k])*(100^((_PrzedKasami[k])%10))));
            g.fillOval(300 +(k*15),500,10,10);}
        }
        // wyrysowuje miejsce za kasami
        
        for(int k=0;k<this._ZaKasami.length;k++){
            if(_ZaKasami[k] != 0){
            g.setColor(new Color((_ZaKasami[k])*(100^((_ZaKasami[k])%10))));
            g.fillOval(400 +(k*15),80,10,10);}
        }
        
        //wyrysowuje kolejki przy kasach
        for(int l=0;l<10;l++){
            for (int a = 0;a<this._kasysymulacji[l].length; a++){
                if(a == 0){ //jeśli pierwszy w kolejce to rysuj czas obsługi
                    g.setFont(new Font("Serif", Font.PLAIN, 14));
                     g.setColor(Color.black);
                    g.drawString("Obsługuje "+this.czasyObs[l][a]+" s.",65 + (j * 90), 170);
                }
                if(_kasysymulacji[l][a] !=0){
                g.setColor(new Color((_kasysymulacji[l][a])*(100^(_kasysymulacji[l][a])%10)));
                g.fillOval(65 +(l*90),250+(a*15),10,10);}
            }
        }
        
        // wyrysowuje czas symulacji
        g.setFont(new Font("Serif", Font.BOLD, 20));
         g.setColor(Color.black);
        g.drawString("całkowity czas symulacji to "+czas+" sekund.", getSize().width-900, 50);


        }

}
}



